package com.zjsru.plan2024.oneday;

/**
 * 2789. 合并后数组中的最大元素
 * 选中一个同时满足 0 <= i < nums.length - 1 和 nums[i] <= nums[i + 1] 的整数 i 。将元素 nums[i + 1] 替换为 nums[i] + nums[i + 1] ，并从数组中删除元素 nums[i] 。
 * @Author: cookLee
 * @Date: 2024-03-14
 */
public class MaxArrayValue {
    /**
     * 主
     * \
     *  输入：nums = [2,3,7,9,3]
     * 输出：21
     * 解释：我们可以在数组上执行下述操作：
     * - 选中 i = 0 ，得到数组 nums = [5,7,9,3] 。
     * - 选中 i = 1 ，得到数组 nums = [5,16,3] 。
     * - 选中 i = 0 ，得到数组 nums = [21,3] 。
     * 最终数组中的最大元素是 21 。可以证明我们无法获得更大的元素。。
     * \
     * 输入：nums = [5,3,3]
     * 输出：11
     * 解释：我们可以在数组上执行下述操作：
     * - 选中 i = 1 ，得到数组 nums = [5,6] 。
     * - 选中 i = 0 ，得到数组 nums = [11] 。
     * 最终数组中只有一个元素，即 11 。
     * \
     * @param args args
     */
    public static void main(String[] args) {
        MaxArrayValue maxArrayValue = new MaxArrayValue();
        int[] nums = new int[]{2,3,7,9,3};
        System.out.println(maxArrayValue.maxArrayValue(nums));
    }

    /**
     * 最大数组值:后置处理
     *
     * @param nums nums
     * @return long
     */
    public long maxArrayValue(int[] nums) {
        int ans = nums[nums.length - 1];
        int len = nums.length;
        for (int i = len - 2; i >= 0; i--) {
            //向后开始寻找适合的元素，满足条件相加，否则更新到前一位
            ans = nums[i] <= ans ? nums[i] + ans : nums[i];
        }
        return ans;
    }

}
